package com.cuz.daileetcode.bat100;

/**
 *
 * @author chenxing
 */
public class 判断一个数是否是某个数的StepSum {

    /**
     * 尝试次数
     */
    private static final int TYPE_TIME =100000;
    public static void main(String[] args) {
        System.out.println(stepSumOf(615));
        System.out.println(isStepSumOf(68211111));
        for (int i = 1; i < TYPE_TIME; i++) {
            if (!isStepSumOf(i)){
                System.out.println(i);
                break;
            }
        }
    }

    /***
     * 当前数是哪个数的stepSum 么
     * @param curNum 当前需要判断的数
     * @return 是否是一个数的stepSum
     */
    public static boolean isStepSumOf(int curNum) {
        //假设curNum 是s的StepSum 那么 s一定小于 curNum 且s>0
        int max = curNum + 1;
        int min = 0;
        while (min + 1 != max) {
            int mid = ((max - min) >> 1) + min;
            //mid 这个数的stepSum 是多少
            int midStepSum = stepSumOf(mid);
            //大于当前这个数 那么是说明s<mid
            if (midStepSum > curNum) {
                max = mid;
            } else if (midStepSum == curNum) {
                //找到了
                return true;
            } else {
                //说明 s大于mid
                min = mid;
            }
        }
        return false;
    }

    /***
     * 返回一个数的 stepSum
     * @param num 数
     * @return 对于的stepSum
     */
    private static int stepSumOf(int num) {
        if (num < 10) {
            return num;
        }
        int i = 1;
        int stepSum = 0;
        while (num > i) {
            stepSum += num / i;
            i = i * 10;
        }
        return stepSum;
    }
}
